#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
from common import VERSION,DEBUG,basepath
import time
try:
	import gtk,gobject
except ImportError:
	print "Installa python-gtk2"
	raise SystemExit
if gtk.pygtk_version < (2, 10, 0):
	print "Ho bisogno delle PyGtk >= 2.10"
	raise SystemExit
try:
	from kiwi.ui.views import BaseView
except ImportError:
	print "Installa python-kiwi"
	raise SystemExit

class MainView(BaseView):
	buf = None
	abstore = None #dati della rubrica (volendo me lo da` anche abview.get_model())
	time = 0.0
	DIMLOG = 5
	MAXLENMSG = 40
	LISTOFFALSE = [False,False,False,False,False]
	
	def __init__(self):
		BaseView.__init__(self, gladefile="netfinity.glade", delete_handler=gtk.main_quit, toplevel_name="main")
		self.buf = self.text.get_buffer()#buffer di text
		
		try:
			if os.name=='posix':
				self.main.set_icon_from_file(basepath()+"/cowicon3.xpm")
			else:
				self.main.set_icon_from_file("cowicon3.xpm")
		except:
			pass
		
		self.set_time()
		
		self.ab = ([],{}) #qui ci metto la rubrica x poterla ridisegnare
		self.nomegruppodefault = "" #come sopra
		
		self.main.set_title(self.main.get_title() % VERSION)
		
		#aggiungo una variabile al TreeView che tenga traccia dell'unico/ultimo ramo aperto
		self.abview.rowexpanded = -1
		#self.abview.destlist = 0 #indica la lista di destinatari attiva
		self.abview.columnCheckbox = None #punta alla colonna delle checkbox, utile x cambiare la lista dei destinatari
		
		#setto per bene la ComboBox x il logging
		self.log.set_model(gtk.ListStore(str))
		cell = gtk.CellRendererText()
		self.log.pack_start(cell, True)
		self.log.add_attribute(cell, 'text', 0)
		
		#setto il TreeView che dovrebbe accogliere la rubrica
		self.abstore = gtk.TreeStore(str,str,int,int,str,'gboolean','gboolean','gboolean','gboolean','gboolean')
		#                            nome,colore,dim testo,dim toggleButton,numero,...
		#                            0    1      2         3                4      5,6,7,8,9
		self.abview.set_model(self.abstore)
		
		self.togglebuttons = gtk.CellRendererToggle()
		self.abview.columnCheckbox = gtk.TreeViewColumn('Selected',self.togglebuttons)
		self.set_destlist(0)
		
		self.abview.append_column(self.abview.columnCheckbox)
		
		cell = gtk.CellRendererText()
		column = gtk.TreeViewColumn('Name',cell,foreground=1,text=0)
		#column.add_attribute(cell,'size',2)#bho nn va :(
		self.abview.append_column(column)
		
		#Liste destinatari
		self.destviews = [self.dest0,self.dest1,self.dest2,self.dest3,self.dest4]
		#metto le pagine in una comoda lista
		for destview in self.destviews:
			destview.set_model(gtk.ListStore(str,str)) #nome (o nome e gruppo), numero
			cell = gtk.CellRendererText()
			column = gtk.TreeViewColumn('Name',cell,text=0)
			destview.append_column(column)
			###
			store = destview.get_model()
			#store.append(['nome [gruppo]','numero'])
		
		self.log_add_line('Benvenuto in %s v%s' % VERSION)
		self.labelinfosw.set_text( self.labelinfosw.get_text() % VERSION )
	def set_default_focus(self):
		self.text.grab_focus()
	def set_time(self):
		self.time = time.time()
	def get_n_dest_list(self):
		n = self.destnotebook.get_current_page()
		if n<=4:
			return n
		else:	return 0 #la lista di default e` la prima
	def set_destlist(self,page_num):
		cell = self.togglebuttons # == self.abview.columnCheckbox.get_cell_renderers()[0]
		self.abview.columnCheckbox.clear()
		
		self.abview.columnCheckbox.pack_start(cell,True)
		self.abview.columnCheckbox.add_attribute(cell,'indicator-size',3)
		self.abview.columnCheckbox.add_attribute(cell,'active',page_num+5)
	def show_about(self):
		self.destnotebook.set_current_page(-1)
	#text
	def get_text(self):
		return self.buf.get_text(self.buf.get_start_iter(),self.buf.get_end_iter()).replace("\n"," ")
	def clear_text(self):
		self.buf.set_text('')
	#log
	def log_add_line(self,line,showtime=False):
		if showtime: line = ("%.2f: "+line) % (time.time()-self.time)
		self.log.prepend_text(line)
		self.log.set_active(0)
		self.log.remove_text(self.DIMLOG)
	#ab
	def draw_addressbook(self,ab=False,nomegruppodefault=""):
		#ab: ( [ (gruppo0,nome0) , (gruppo1,nome1) , ... ] , { (gruppo0,nome0):numero0 , (gruppo1,nome1):numero1 , ... } )
		if ab:
			self.nomegruppodefault = nomegruppodefault
			self.ab = ab
			l,d = ab
		else:
			self.abstore.clear() #si tratta di un redraw, quindi la pulisco
			nomegruppodefault = self.nomegruppodefault
			l,d = self.ab
		gruppi = {}
		for contatto in l:
			gruppo,nome = contatto
			if gruppo == "default":
				gruppo = nomegruppodefault
			if not gruppo in gruppi:
				gruppi[gruppo] = self.abstore.append(
					None, [gruppo,"blue",15,15,""]+self.LISTOFFALSE
				)
			self.abstore.append(
				gruppi[gruppo], [nome,"black",10,11,d[contatto]]+self.LISTOFFALSE
			)
	def clear(self):
		self.clear_text()
		for destview in self.destviews:
			destview.get_model().clear()
		#self.set_destlist(0)
		
		self.draw_addressbook()
		self.destnotebook.set_current_page(0) #mi riposiziono sulla prima pagina
		self.set_default_focus()

